package com.tourism.util;

import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.concurrent.TimeUnit;

/**
 * @Description 令牌管理工具
 * @Author z
 * @Date 2021-03-09 23:43
 */
@Component
public class TokenManager {
    @Value("${jwt.expire.second}")
    private long expireTime;
    private Cache<String, String> cache = Caffeine.newBuilder()
            //初始大小
            .initialCapacity(2)
            //最大数量
            .maximumSize(2000)
            //过期时间
            .expireAfterWrite(expireTime, TimeUnit.SECONDS)
            .build();


    @PostConstruct
    public void init() {
        cache = Caffeine.newBuilder()
                //初始大小
                .initialCapacity(2)
                //最大数量
                .maximumSize(2000)
                //过期时间
                .expireAfterWrite(expireTime, TimeUnit.SECONDS)
                .build();
    }

    /**
     * 存储token，并设置过期时间
     *
     * @param token
     */
    public void storeToken(String token) {
        cache.put(token, "token");
    }

    /**
     * 判断token是否存在
     *
     * @param token
     * @return
     */
    public boolean existToken(String token) {
        return cache.getIfPresent(token) != null;
    }


    /**
     * 退出登录的时候进行token的删除
     *
     * @param token
     */
    public void removeToken(String token) {
        cache.invalidate(token);
    }

}
